﻿/**
 * <pre>
 * 该JS包含表单常用方法
 * 如果需要重载,请在引入该js之后的js用同名方法或变量覆盖即可
 * 
 * 注意:参数列表即使不同,只要方法名或变量相同也会覆盖
 * 
 * 具体用法请参考
 * action.js,action.html带有树菜单
 * user.js,user.html有菜单树,但是菜单树不需要同步刷新
 * role.js,role.html没有树菜单
 * </pre>
 */
/**
 * 模块
 * @type 
 */
var module = {
	selectTreeNode : null, // 树当前选择节点
	fromId : 'module_from',
	dialogId : 'module_dialog',
	datagrid : 'module_datagrid',

	// 菜单树id,当且仅当有菜单树且菜单树id不同需要为该变量重新赋值
	// 注意:如果有其他树,但不是菜单树,请不要覆盖该js中的任何关于树的变量和函数
	// 		请用添加其他变量及函数.具体参照role.js以及role.html中对权限树的实现
	treeId : 'module_treeId',
	
	rootUrl : '',
	modifyUrl : 'modify.do',
	enableUrl : 'enable.do',
	disenableUrl : 'disenable.do',
	deleteUrl : 'delete.do',
	
	/**
	 * 装载表单数据
	 * 
	 * @param data
	 *            装载的数据
	 */
	loadForm : function (data) {
		$('#' + module.fromId).form('load', data);
	},
	
	/**
	 * 刷新左侧菜单数据
	 */
	reloadTree : function (){
		$('#' + module.treeId).tree('reload');
	},
	
	/**
	 * 展开左侧菜单树
	 */
	expandTree : function (){
		$('#' + module.treeId).tree('expandAll');
	},

	/**
	 * 收缩左侧菜单树
	 */
	collapseTree : function (){
		$('#' + module.treeId).tree('collapseAll');
	},
	
	/**
	 * 菜单树,数据加载成功后触发的事件
	 * 
	 * @param {Object}
	 *            node 树节点
	 * @param {Array}
	 *            data 返回的所有数据
	 */
	onLoadSuccessTree: function (node, data){
		if (module.selectTreeNode) {
			var node = $('#' + module.treeId).tree('find', module.selectTreeNode);
			if (null == node) { // 如果当前节点被删除,则获取第一个根节点
				node = $('#' + module.treeId).tree('getRoot');
			}
			$('#' + module.treeId).tree('select', node.target);
		}
	},
	
	/**
	 * 树菜单树选择事件
	 * 
	 * @param node 节点数据
	 */
	onSelectTree : function (node) {
		module.selectTreeNode = node.id;
		// 判断是否为根节点
		if (!node.id || node.id == -1) {
			// 如果角色Id为空或者为-1则刷新列表
			module.reloadDatagrid();
		} else {
			// getAllChildNodeId函数在tree.js
			var ids = getAllChildNodeId(this, node);
			var filters = [];
			// 判断是否为叶子节点,如果是叶子节点则没有子节点
			if ($(this).tree('isLeaf', node.target)) {
				filters.push(add_condition("and", "等于", "", "id", ids.join(), "", "number"));
			} else {
				filters.push(add_condition("and", "in", "", "id", ids.join(), "", "string"));
			}
			fun_query(module.datagrid, filters);
		}
	},
	
	/**
	 * 刷新列表
	 */
	reloadDatagrid : function () {
		$('#' + module.datagrid).datagrid('reload');
	},
		
	/**
	 * 数据列表双击事件
	 * 
	 * @param rowIndex
	 *            行索引
	 * @param rowData
	 *            行数据
	 */
	onDblClickRow : function (rowIndex, rowData) {
		module.openDialog();
		module.loadForm(rowData);
	},
	
	/**
	 * 打开信息编辑框
	 */
	openDialog : function () {
		$('#' + module.fromId).form('clear');
		$('#' + module.dialogId).dialog('open');
	},
	
	/**
	 * 关闭信息编辑框
	 */
	closeDialog : function () {
		$('#' + module.dialogId).dialog('close');
	},
	
	/**
	 * ajax请求
	 * 
	 * @param url
	 *            地址
	 */
	ajaxRequest : function (url) {
		// 注意:在有菜单树的情况下,请覆盖该方法,
		// 用Common.Util.sendTreeDataIds替换本方法的Common.Util.sendGridDataIds
		// 并且在回调函数中不要手动刷新数据列表
		// 请参为菜单树添加onLoadSuccess事件调用当前js中的onLoadSuccessTree
		// 和onSelect事件,调用当前js中的onSelectTree
		Common.Util.sendGridDataIds(module.datagrid, module.rootUrl + url, function (msg) {
			module.reloadDatagrid();module.reloadTree();
			$.ajax({
				type : "post",
				url : "group/group_native_tree.tree",
				dataType:"json",
				success : function(data) {
					$('#usertree').tree('loadData', data);
					$('#UGroup').combotree('loadData', data);
				},
		    	error : function() {
		    		$.messager.alert('info','网络超时，请稍后再试！');
		    	}
			});
		});
	},
	
	/**
	 * 表单提交
	 */
	edit : function () {
		Common.Util.submitForm(module.fromId, module.rootUrl + module.modifyUrl, function (msg) {
			module.reloadTree(); // 如果没有菜单树也不用担心重新加载树抛出异常的问题
			if (null == module.selectTreeNode) {
				module.reloadDatagrid();
			}
			module.closeDialog();
		});
	},
	
	/**
	 * 修改信息
	 */
	modify : function () {
		var selections = $('#' + module.datagrid).datagrid('getSelections');
		if (selections.length == 1) {
			module.openDialog();
			module.loadForm(selections[0]);
		} else {
			Common.Util.showMessager({msg:"未选择操作的数据或选择了多条操作数据!"});
		}
	},
	
	/**
	 * 删除选择
	 */
	deleted : function () {
		module.ajaxRequest(module.deleteUrl);
	},
	
	/**
	 * 启用
	 */
	enable : function () {
		module.ajaxRequest(module.enableUrl);
	},
	
	/**
	 * 禁用
	 */
	disenable : function () {
		module.ajaxRequest(module.disenableUrl);
	},
	
	/**
	 * 查询
	 * 
	 * 该方法由模块自己实现
	 */
	queryDatagrid : function (){
		
	},
	
	/**
	 * 刷新列表
	 */
	refreshDatagrid : function (){
		revert_query_args(module.datagrid);
	}
};
